// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})

const db = cloud.database()
const _ = db.command

// 云函数入口函数
exports.main = async (event, context) => {
  try {
    console.log('云函数开始执行')
    console.log('接收到的参数:', event)
    
    const wxContext = cloud.getWXContext()
    const userId = wxContext.OPENID
    
    console.log('用户ID:', userId)
    
    if (!userId) {
      console.log('用户未登录')
      return {
        status: 'error',
        message: '用户未登录'
      }
    }
    
    // 根据日期查询
    if (event.date) {
      console.log('开始按日期查询:', event.date)

      const dateStr = event.date

      // 方法1：优先使用 date_str 字段查询（新格式）
      console.log('尝试使用 date_str 字段查询')
      let records = await db.collection('daily_records')
        .where({
          user_id: userId,
          date_str: dateStr
        })
        .get()

      console.log('date_str 查询结果:', {
        count: records.data.length,
        data: records.data
      })

      // 方法2：如果没找到，尝试使用 date 字段查询（兼容旧格式）
      if (records.data.length === 0) {
        console.log('date_str 查询无结果，尝试使用 date 字段查询')

        const [year, month, day] = dateStr.split('-').map(Number)

        // 尝试多种日期格式匹配
        const localDate = new Date(year, month - 1, day, 0, 0, 0, 0)
        const utcDate = new Date(Date.UTC(year, month - 1, day, 0, 0, 0, 0))
        const nextLocalDate = new Date(year, month - 1, day + 1, 0, 0, 0, 0)
        const nextUtcDate = new Date(Date.UTC(year, month - 1, day + 1, 0, 0, 0, 0))

        console.log('尝试多种日期格式:', {
          localDate: localDate.toISOString(),
          utcDate: utcDate.toISOString(),
          nextLocalDate: nextLocalDate.toISOString(),
          nextUtcDate: nextUtcDate.toISOString()
        })

        // 使用较宽的时间范围查询
        records = await db.collection('daily_records')
          .where({
            user_id: userId,
            date: _.gte(utcDate).and(_.lt(nextUtcDate))
          })
          .get()

        console.log('date 字段查询结果:', {
          count: records.data.length,
          data: records.data
        })
      }

      return {
        status: 'success',
        data: records.data.length > 0 ? records.data[0] : null
      }
    }
    
    // 根据ID查询
    if (event.recordId) {
      console.log('开始按ID查询:', event.recordId)
      
      const record = await db.collection('daily_records')
        .doc(event.recordId)
        .get()
      
      console.log('ID查询结果:', record)
      
      if (record.data && record.data.user_id === userId) {
        return {
          status: 'success',
          data: record.data
        }
      } else {
        return {
          status: 'error',
          message: '记录不存在或无权访问'
        }
      }
    }
    
    return {
      status: 'error',
      message: '参数错误：需要提供 date 或 recordId'
    }
    
  } catch (error) {
    console.error('云函数执行错误:', error)
    return {
      status: 'error',
      message: error.message || '服务器错误',
      error: error.toString()
    }
  }
}
